/*
const arr = [10, 20, 30, 40]

// pop 尾部弹出元素
const popRes = arr.pop()    // 返回弹出的元素40
console.log('pop', popRes, arr)    // [10, 20, 30]

// push 尾部插入元素
const pushRes = arr.push(50) // 返回 length
console.log('push:', pushRes, arr)

// unshift 在数组头插入元素
const unshiftRes = arr.unshift(66) // 返回 length
console.log('unshift:', unshiftRes, arr)

// shift 在数组头删除元素
const shiftRes = arr.shift()   // 返回被删除元素
console.log('shift:', shiftRes, arr)
*/

/*
// 纯函数：1. 不改变源数组（没有副作用）；2. 返回一个数组
let arr = [10, 20, 30, 40]
// concat
const arr1 = arr.concat([50, 60, 70])   // [10, 20, 30, 40, 50, 60, 70]
// map
arr = [10, 20, 30, 40]
const arr2 = arr.map(num => num * 10)   // [100, 200, 300, 400]
// filter
arr = [10, 20, 30, 40]
const arr3 = arr.filter(num => num > 25)    // [30, 40]
// slice 数组切片，只是浅拷贝
arr = [10, 20, 30, 40]
const arr4 = arr.slice()    // [10, 20, 30, 40]
*/
// 非纯函数
// push pop shift unshift
// forEach
// some every
// reduce

const arr = [10, 20, 30, 40, 50]

// slice 纯函数
const arr1 = arr.slice()    // [10, 20, 30, 40, 50]
const arr2 = arr.slice(1, 4)    // [20, 30, 40] 不包含最后一个索引的元素
const arr3 = arr.slice(2)   // [30, 40, 50] 从索引2开始到结尾
const arr4 = arr.slice(-3)  // [30, 40, 50] 从后面开始截取3个元素

// splice 非纯函数
const spliceRes = arr.splice(1, 2, 'a', 'b', 'c')   // arr = [10, 'a', 'b', 'c', 40, 50]
const spliceRes1 = arr.splice(1, 2) // arr = [10, 'c', 40, 50]
const spliceRes2 = arr.splice(1, 0, 'a', 'b', 'c')  // arr = [10, 'a', 'b', 'c', 'c', 40, 50]
console.log('spliceRes',spliceRes)  // [20, 30]
console.log('spliceRes1',spliceRes1)    // ['a', 'b']
console.log('spliceRes2',spliceRes2)    // []

// map示例
const res = [10, 20, 30].map(parseInt)
console.log(res)

// // 拆解
// [10, 20, 30].map((num, index) => {
//     return parseInt(num, index)
// })
